跳到主要内容

网站部署踩坑日记|SSL & HTTPS

最近做完了一个个人项目,通过AWS EC2使用Docker部署数据库和NodeJS后端,前端项目通过Vercel自动部署。

因为Vercel部署后会自带SSL,所以要求我在AWS部署后端时也需要添加SSL。

之前有通过腾讯云免费申请SSL证书,再通过Nginx设置加载以实现https访问。如下这样:

server {
    listen 443 ssl;

    ssl_certificate /etc/nginx/ssl/your_certificate.crt;
    ssl_certificate_key /etc/nginx/ssl/your_private_key.key;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

这次试试另一种方法,Let’s Encrypt。

首先还是在/etc/nginx/conf.d/your-website.conf文件中添加了如下配置

server {
    listen 80;
    server_name your-domain-name.com;

    # Serve the static page
    location / {
        root /root/of/your/dist/folder;
        try_files $uri $uri/ /index.html;
    }

    # Serve the backend application
    location /api/v1 {
        proxy_pass http://localhost:4000; # Change it to your app's listening port
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

保存以后执行如下命令进行测试

# reload nginx settings
sudo nginx -s reload

# restart nginx 
sudo systemctl restart nginx

# test nginx settings
sudo nginx -t

一切正常后,之后根据AI老师的指示,进行了一系列安装:

sudo apt-get update
sudo snap install --classic certbot # could be different based on your system's PKM

在你的域名购买商那里DNS解析到服务器地址以后,然后开始配置

sudo certbot --nginx

按照指示进行一系列设置,期间遇到一个小bug就是提示总是无法生成证书,搜索以后发现是由于域名刚买,certbot查不到DNS记录,所以等了下继续再设置就好了。

2024.4.3更新

小插曲:

全部配置完成后,nginx无权限法访问root的路径。

我的前端dist目录是/home/ubuntu/project/dist ,尝试更改dist,project等目录的权限和所有者,均无效。

后尝试得出结论,需要为ubuntu 目录增加others 的读和执行权限。

sudo chmod o+rx ubuntu